package cn.tedu.mapper;

import cn.tedu.pojo.Student;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * 使用注解方式进行开发
 * 用于定义MyBatis映射student表的接口类
 * 接口类的类名一般情况下,都和定义的数据表的表名对应上,
 * 然后最后以Mapper为结尾,这是行业规范,遵守会提供一个更加
 * 方便的阅读,使用的体验
 */
/*
    @Mapper: 是MyBatis提供的注解,作用是标记的类会被SpringBoot项目启动后,
    被扫描到Spring容器中,并且可以标记这个类是数据层的mapper
 */
@Mapper
public interface StudentMapper {
    /**
     * ①声明一个接口方法
     * 1.是公开方法
     * 2.方法名: 要求见名知意(查询都会以get、select、query等开头命名,新增一般会以insert、add等开头命名)
     * 3.返回值: 要和绑定的SQL执行的后的结果相关联
     * 3.1如果绑定的是增删改的SQL,返回值可以写void,或者是int
     * 3.2如果绑定的是查询的SQL,返回一条记录,则写封装该记录的实体类类名,如果返回多条记录,则写List,并且封装数据的实体类作为泛型
     * 4.参数: 暂时不考虑
     * ②为接口方法绑定SQL(注解方式)
     * 1.如果要绑定查询的SQL,就使用@Select,增删改,就使用@Update,注解使用在要绑定的接口方法上
     * 2.将要绑定的SQL语句,写入到注解中
     * 3.注意!!!接口和SQL的关系必须要严格按照规则绑定,不能修改的SQL使用@Update
     */
    //查询student表中的所有记录
    @Select("SELECT * FROM student")
    public List<Student> getStudentAll();

    //向student表中新增一条记录
    @Update("INSERT INTO student(id, name, age, gender, job, birth, location_id, team_leader, class_id)VALUES (null, '葛心怡', 18, '女', '超级黑客', '2015-1-1', 1, 1, 1)")
    public int addStudent();

    //修改student表中的记录
    @Update("UPDATE student SET job = '江洋大盗' WHERE name = '葛心怡'")
    public int updateStudent();

    //删除student表中的记录
    @Update("DELETE FROM student WHERE name = '葛心怡'")
    public int deleteStudent();
}
